package jers.impl;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;

import jers.Result;
import jers.util.Utility;


/**
 * Classe que implementa a interface {@link Result}.
 * <p>
 * Esta contem uma instancia de {@link HashMap} para armazenar o dado retornado. 
 * </p>
 * 
 * @see {@link SystemFactory}, {@link Result}
 * 
 * @author 
 * 		<a href="mailto:felipe.zappala@gmail.com">
 * 			Luis Felipe Zappala
 * 		</a> [ <a href="http://lncc.br/ist">ISTCC-P</a> / 2009 ]
 */
final class RemoteResult implements Result {

	/** O ID serial de versao da classe */
	private static final long serialVersionUID = 3170809107930806426L;
	
	/** O mapa de valores.*/
	private final Map<String, Object> data;
	
	/**
	 * O construtor padrao do objeto.
	 */
	public RemoteResult() {
		this.data = new HashMap<String, Object>();
	}
	
	@SuppressWarnings("unchecked")
	public <T extends Serializable> T get(String key) {
		return (T) this.data.get(key);
	}

	public <T extends Serializable> void set(String key, T value) {
		this.data.put(key, value);
	}
	
	/**
	 * Retorna uma representacao {@link String} do objeto.
	 * <p>
	 * <b>Formato:</b><br>
	 * 		<code>ClassName{attributeA:valueA,...,attributeN:valueN}</code>
	 * </p>
	 * @return 
	 * 		A representacao {@link String} do objeto.
	 */
	@Override
	public String toString() {
		return Utility.toString(this);
    }
}
